package tp.algo2.futbol

import java.util.ArrayList
import java.util.HashSet
import java.util.Set
import org.eclipse.xtend.lib.Property
import java.util.List

class Partido {
	
	@Property List<Jugador> jugadores
	@Property String dia
	@Property String lugar
	@Property Set<NotificadorXMail> observers
	@Property Jugador jugadorQPuntua
	Set<Mail> mailsEnviados

/// Refactoring Karina ///////////////////////////////////////////////////////////////////////////

	@Property int idPartido
	@Property Partido estePartido

///////////////////////////////////////////////////////////////////////////////////////////////////		

	new() {
		jugadores = new ArrayList
		observers = new HashSet
		mailsEnviados = new HashSet<Mail>
	}

/// Refactoring Karina ///////////////////////////////////////////////////////////////////////////

	def generarId (int id) {
		idPartido = id
	}

///////////////////////////////////////////////////////////////////////////////////////////////////	
	
	def cantidadDeJugadores() {
		jugadores.size
	}

	/*def partidoCompleto() {			 //Refactoring Alex Baico
		this.cantidadDeJugadores == 10
	}*/
	
	/* def devolverJugadores(){    //Refactoring Alex Baico
	 	return jugadores
	 }*/

	def notificarPartidoCompleto() {
		if (!this.partidoIncompleto)
			observers.forEach[ob|ob.partidoCompleto(this)]
	}

	def partidoIncompleto() {
		this.cantidadDeJugadores < 10
	}

	def notificarPartidoIncompleto() {
		if (this.partidoIncompleto)
			observers.forEach[ob|ob.partidoIncompleto(this)]
	}

	def agregarJugador(Jugador jugador) {
		if (jugador.puedeJugar(this)) {
			jugadores.add(jugador)
			jugador.notificarAmigos
			this.notificarPartidoCompleto
		} else {
			println("No puede jugar")
		}
	}

	def agregarObserver(NotificadorXMail obser) {
		observers.add(obser)
	}

	def removerObserver(Object obser) {
		observers.remove(obser)
	}

	def sacarJugador(Jugador jugador) {
		jugadores.remove(jugador)
		this.notificarPartidoIncompleto
	}
	
	def partidoPuntuadoPor(Jugador jugador){
		this.getJugadorQPuntua
	}
		/*tp5 miguel angel lunda medrano */
		
	def	sacarATodosDeLaLista(){
		jugadores.clear
	}
	
}
